# 字典
# 格式：字典名={key1:value1,key1:value2,...}
# 注意：键值对形式保存，键具有唯一性，但值可以重复。

dic = {'name': 'bingbing', 'age': 18}
print(type(dic))  # <class 'dict'>
dic2 = {'name': 'bingbing', 'name': 'haha'}
print(dic2)  # 相同的key不会报错，但后边的值会覆盖前边的值
dic3 = {'name': 'bingbing', 'eng_name': 'bingbing'}
print(dic3)  # 值可以重复

# 字典常见操作
# 查看元素
# 变量名[键名]
dic = {'name': 'bingbing', 'age': 18}
# print(dic[2]) # 不可以根据下标，字典没有下标，查找元素需要根据键名
print(dic['name'])
# print(dic['sex']) # 键名不存在，会报错

# 变量名.get(键名)
print(dic.get('name'))
print(dic.get('sex'))  # 键名不存在返回Null
print(dic.get('sex', '不存在'))  # 不存在，返回之定义的默认值

# 修改元素
dic = {'name': 'bingbing', 'age': 18}
dic['name'] = 'haha'  # 列表通过下标修改，字典通过键名修改
print(dic)
dic['sex'] = '男'  # 键名不存在，则新增元素
print(dic)

# 删除元素
# del
# 删除整个字典
dic = {'name': 'bingbing', 'age': 18}
del dic
# print(dic) # 报错，dic已经被删除
# 删除指定键值对，注意：键值不存在会报错
dic = {'name': 'bingbing', 'age': 18}
del dic['name']
print(dic)

# clear() 清空整个字典，但保留空字典
dic = {'name': 'bingbing', 'age': 18}
dic.clear()
print(dic)

# pop() 删除指定键值对，键不存在，则报错
dic = {'name': 'bingbing', 'age': 18}
dic.pop('name')  # 必须写键名，否则会报错
print(dic)

# dic.pop('sex') # 报错，键不存在
# popitem() 3.7之前的版本是随机删除一个键值对，3.7之后的版本是默认删除最后一个键值对
dic = {'name': 'bingbing', 'age': 18}
dic.popitem()
print(dic)

# 字典常见操作
# len()
dic = {'name': 'bingbing', 'age': 18, "sex": 'nv'}
print(len(dic))  # 4

# keys() 返回字典所有键名
print(dic.keys())  # dict_keys(['name', 'age', 'sex'])
# for ite in dic.keys():
#     print(ite,end=' ')
for ite in dic:  # 只取出键
    print(ite, end=" ")
print("")

# values() 取出值
print(dic.values())  # dict_values(['bingbing', 18, 'nv'])
for ite in dic.values():
    print(ite, end=" ")
print("")

# items() 返回字典所有的键值对(键值对以元组的形式)
dic = {'name': 'bingbing', 'age': 18, "sex": 'nv'}
print(dic.items())  # dict_items([('name', 'bingbing'), ('age', 18), ('sex', 'nv')])
for item in dic.items():
    print(item)

# for x,y in dic.items():
#     print(x,y)
